package backtype.storm.scheduler;

import java.util.Collection;
import java.util.Map;
import java.util.Set;

public interface INimbus {
	void prepare(Map stormConf, String schedulerLocalDir);

	/**
	 * Returns all slots that are available for the next round of scheduling. A
	 * slot is available for scheduling if it is free and can be assigned to, or
	 * if it is used and can be reassigned.
	 */
	Collection<WorkerSlot> allSlotsAvailableForScheduling(
			Collection<SupervisorDetails> existingSupervisors,
			Topologies topologies, Set<String> topologiesMissingAssignments);

	// this is called after the assignment is changed in ZK
	void assignSlots(Topologies topologies,
			Map<String, Collection<WorkerSlot>> newSlotsByTopologyId);

	// map from node id to supervisor details
	String getHostName(Map<String, SupervisorDetails> existingSupervisors,
			String nodeId);

	IScheduler getForcedScheduler();
}
